import { IsNotEmpty, IsString, IsEnum, IsOptional, MinLength, Matches } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { RoleType } from '../../../entities/role.entity';

export class CreateRoleDto {
  @ApiProperty({ description: '角色名称', example: '系统管理员' })
  @IsNotEmpty({ message: '角色名称不能为空' })
  @IsString({ message: '角色名称必须是字符串' })
  @MinLength(2, { message: '角色名称最少2个字符' })
  name: string;

  @ApiProperty({ description: '角色代码', example: 'system_admin' })
  @IsNotEmpty({ message: '角色代码不能为空' })
  @IsString({ message: '角色代码必须是字符串' })
  @Matches(/^[a-z][a-z0-9_]*$/, { message: '角色代码只能包含小写字母、数字和下划线，且必须以字母开头' })
  code: string;

  @ApiPropertyOptional({ description: '角色描述', example: '系统管理员，拥有所有权限' })
  @IsOptional()
  @IsString({ message: '角色描述必须是字符串' })
  description?: string;

  @ApiPropertyOptional({ description: '角色类型', enum: RoleType, default: RoleType.CUSTOM })
  @IsOptional()
  @IsEnum(RoleType, { message: '无效的角色类型' })
  type?: RoleType;
} 